FTP (siglas en inglés de File Transfer Protocol, ‘Protocolo de Transferencia de Archivos’) en informática, es un protocolo de red para la transferencia de archivos entre sistemas conectados a una red TCP (Transmission Control Protocol), basado en la arquitectura cliente-servidor. Desde un equipo cliente se puede conectar a un servidor para descargar archivos desde él o para enviarle archivos, independientemente del sistema operativo utilizado en cada equipo.
El servicio FTP es ofrecido por la capa de aplicación del modelo de capas de red TCP/IP al usuario, utilizando normalmente el puerto de red 20 y el 21. Un problema básico de FTP es que está pensado para ofrecer la máxima velocidad en la conexión, pero no la máxima seguridad, ya que todo el intercambio de información, desde el login y password del usuario en el servidor hasta la transferencia de cualquier archivo, se realiza en texto plano sin ningún tipo de cifrado, con lo que un posible atacante puede capturar este tráfico, acceder al servidor y/o apropiarse de los archivos transferidos.
Para solucionar este problema son de gran utilidad aplicaciones como SCP y SFTP, incluidas en el paquete SSH, que permiten transferir archivos pero cifrando todo el tráfico.
Modos de conexión del cliente FTP
FTP admite dos modos de conexión del cliente. Estos modos se denominan activo (o Estándar, o PORT, debido a que el cliente envía comandos tipo PORT al servidor por el canal de control al establecer la conexión) y pasivo (o PASV, porque en este caso envía comandos tipo PASV). Tanto en el modo Activo como en el modo Pasivo, el cliente establece una conexión con el servidor mediante el puerto 21, que establece el canal de control.
Activo
Pasivo
Instalación de proFTPd
El proceso de instalación de este servidor FTP en Debian es muy sencillo. Bastará con instalar el paquetes proftpd
desde un terminal con el siguiente comando sudo apt install proftpd
Durante la instalación nos preguntará sobre el tipo de instalación que queremos. En caso de hacer poco uso del servidor FTP podemos seleccionar la opción inetd
para ahorrar recursos del sistema. Si vamos a hacer un uso considerable del servidor FTP con varios usuarios y bastante tiempo deberíamos instalarlo como independiente
.
Seleccionamos la opción que más se ajuste a nuestras necesidades y finalizamos la instalación del servidor.
Configuración de proFTPd
El archivo de configuración principal de proFTPd se encuentra en /etc/proftpd/proftpd.conf. Desde aquí deberemos configurar la mayoría de los aspectos de nuestro servidor FTP.
Lo primero que debemos hacer es establecer una carpeta como directorio principal para todos los usuarios del FTP. Para ello, abriremos con nuestro editor de texto preferido el archivo de configuración anterior sudo nano /etc/proftpd/proftpd.conf
Una vez allí, buscaremos la línea comentada DefaultRoot
y la descomentamos borrando la almohadilla #. Esto nos va a permitir que cuando cada usuario acceda a su cuenta del FTP, estos accederán directamente a su carpeta home
.
También podemos hacer que todos los usuarios accedan por defecto a una carpeta (como en el paso anterior) salvo un usuario que queremos que acceda a otra o, simplemente, tenga permiso de administrador y pueda acceder a todo el disco.
El parámetro DefaultRoot tiene la siguiente estructura:
DefaultRoot [directorio] [grupo de usuarios que tendrán ese directorio por defecto] [Grupo de usuarios a los que no se les aplicará ese directorio]
Una vez hecha todas las modificaciones necesarias reiniciamos el servicio systemctl restart proftpd
Acceder a servidor FTP de forma anónima
Para ello vamos a modificar el fichero /etc/proftpd/proftpd.conf
, y nos dirigimos a casi el final del documento donde encontraremos la etiqueta Anonymous ~
descomentaremos todas las lineas dentro de la etiqueta, ojo, solo las que tienen una sola #.
Una vez descomentado cambiaremos la etiqueta Anonymous ~
, en la cual vamos a modificar el directorio anonymous para ello modificaremos ~
por el directorio el cual queremos acceder.
Si queremos comprobar si la configuracion realizada esta funcionando bien desde la terminal de nuestro equipo podemos ejecutar ftp localhost
nos pedirá un usuario el cual sera anonymous
y la contraseña en blanco, una vez conectados hacemos un ls
y tendremos la lista de ficheros/carpetas que contiene el directorio.
También podemos comprobarlo desde un navegador o desde filezilla:
Navegador
Basta con poner la dirección que hemos definido en nuestro fichero de configuración ServerName "ftp.jlramirez.gonzalonazareno.org"
y añadir en el /etc/hosts
de nuestra maquina anfritiona o en un servidor dns que la ip del servidor ftp tiene esa dirección [IP_MAQUINA] ftp.jlramirez.gonzalonazareno.org
Filezilla
Para realizar esta comprabacion instalamos Filezilla apt instal filezilla
en un cliente linux y añadimos un nuevo servidor:
Clicamos en conectar y ya tendremos el listado de ficheros/carpetas del directorio especificado:
Ofrecer una colección de documentos mediante http y ftp
Una vez tenemos configurado nuestro servidor ftp, vamos a instalar un Servidor Web una vez instalados vamos a crear un VirtualHosts que vamos a llamar /etc/apache2/sites-available/iesgn.conf
y añadimos lo siguiente:
ServerName www.iesgn.org ServerAdmin webmaster@localhost DocumentRoot /var/www/html Alias "/documentos" "/var/www/html/documentos/" <Directory /var/www/html/documentos/> Options +Indexes </Directory>
Una vez modificado el fichero vamos a habilitar el nuevo VirtualHost a2ensite iesgn.conf
y reiniciamos el servicio systemctl restart apache2
.
Ya solo queda añadir en nuestra maquina anfitriona al igual que antes la nueva direccion en el fichero /etc/hosts
y añadimos [IP_Maquina] www.iesgn.org
ftp.jlramirez.gonzalonazareno.org
www.iesgn.org
Configuración de un usuario para acceso por ftp
Ahora vamos a crear un usuario en el servidor que se va a llamar informatica useradd user_informatica
y le asignamos una contraseña passwd user_informatica
.
Tambien vamos a crear el directorio mkdir /home/user_informatica
y cambiamos el propietario de dicha carpeta chown -R user_informatica:user_informatica user_informatica/
Ahora vamos a modificar el fichero /etc/proftpd/proftpd.conf
y vamos a añadir la siguiente linea DefaultRoot /var/www/html/user_informatica/ user_informatica
, vamos a añadir tantas lineas como usuarios tengamos.
ftp.jlramirez.gonzalonazareno.org
Si introducimos en nuestro navegador ftp.jlramirez.gonzalonazareno.org
nos pedirá el usuario y la contraseña del usuario valido.
Una vez introducido un usuario valido vamos a ver lo que contiene dicha carpeta.
www.iesgn.org
Ahora configuramos el VirtualHost creado anteriormente para poner la nueva ruta del nueva usuario:
ServerName www.iesgn.org ServerAdmin webmaster@localhost DocumentRoot /var/www/html Alias "/informatica" "/var/www/html/user_informatica/"Options +Indexes Options +Indexes
Y reiniciamos el servicio systemctl restart apache2
Y accedemos desde el navegador:
Instalar net2ftp en debian Jessie
Instalar dependencias necesarias
Para ello primero debemos instalar apt install php5 mysql-server phpmyadmin
, nos dirigimos a la carpeta donde tenemos alojados los ficheros del servidor web /var/www/html/
.
Descargar y descomprimir net2ftp
Una vez en el directorio vamos a descargar el paquete net2ftp wget http://www.net2ftp.com/download/net2ftp_v1.0.zip
y lo descomprimimos para lo cual necesitamos el paquete apt install zip
, y lo descomprimimos unzip net2ftp_v1.0.zip
.
Acceder a PhpmyAdmin
Ya tenemos el «.zip» descomprimido, el siguiente paso es entrar en «phpmyadmin» 192.168.1.52/phpmyadmin
, vamos a acceder con el usuario root
, que es el usuario que crea MySQL por defecto, creamos una base de datos que llamaremos net2ftp
.
A continuación añadiremos las tablas correspondientes que podremos encontrar en la carpeta descomprimida de fichero descargado, por tanto importamos el fichero create_tables.sql
Y lo importamos en phpmyadmin:
Si todas las tablas se importan bien debe de aparecer lo siguiente:
Modificar fichero de configuración de net2ftp
Por ultimo vamos a modificar el fichero /files_to_upload/settings.inc.php
, y vamos a modificar las siguientes lineas:
// ---------------------------------------------------------------------------------- // Admin Panel username and password // If no password is set, the Admin panel will not be accessible by anyone // ---------------------------------------------------------------------------------- $net2ftp_settings["admin_username"] = "user_informatica"; $net2ftp_settings["admin_password"] = "*****"; // MASTER SETTING that overrides the other settings below: use a database? $net2ftp_settings["use_database"] = "no"; // "yes" or "no" // Enter your MySQL settings $net2ftp_settings["dbusername"] = "root"; $net2ftp_settings["dbpassword"] = "*****"; $net2ftp_settings["dbname"] = "net2ftp"; $net2ftp_settings["dbserver"] = "localhost"; // on many configurations, this is "localhost"
Una vez cambiados reiniciamos el servicio de apache systemctl restart apache2
y accedemos en el navegador [Dirección IP]/net2ftp_v1.0/files_to_upload/
y ya tendremos nuestro cliente FTP instalado:
Acceder con usuarios virtuales
El uso de usuarios reales del sistema para el acceso FTP puede tener varias desventajas (gestión, seguridad,…). Modifica la configuración del sistema para que se usen usuarios virtuales para el acceso por FTP, cuya información este guardada en una tabla mysql o en un directorio ldap.
Nosotros vamos a utilizar mysql
Instalación del paquete necesarios
Instalamos los paquetes necesarios apt install mysql-server mysql-client proftpd-basic proftpd-mod-mysql
Creacion base de datos y tablas
El siguiente paso es editar el fichero /etc/proftpd/proftpd.conf
, para que las siguientes lineas queden como especifico aqui:
#Descomentamos esta linea RequireValidShell off #Ahora configuramos proftp para que use usuarios virtuales, #que almacenaremos en una base de datos mysql. #En el fichero de configuración añadimos lo siguiente: # Use this to jail all users in their homes DefaultRoot /home/ftp/user_ftp user_ftp AuthPAM off SQLBackend mysql SQLAuthTypes Backend SQLAuthenticate on SQLConnectInfo proftpd@localhost root root SQLDefaultGID 65534 SQLDefaultUID 65534 SQLMinUserGID 500 SQLMinUserUID 500 SQLGroupInfo grupos groupname gid members SQLUserInfo usuarios username password uid gid homedir shell SQLUserWhereClause "activa=1" SQLLogFile /var/log/proftpd_mysql.log
Por ultimo modificamos el fichero de los módulos mysql de proftpd, para ello editamos el siguiente fichero /etc/proftpd/modules.conf
, descomentaremos las siguiente lineas:
# the existent SQL backeds. LoadModule mod_sql.c # Install proftpd-mod-mysql and decomment the previous # mod_sql.c module to use this. LoadModule mod_sql_mysql.c
Y reiniciamos el servicio systemctl restart proftpd
Poblar Base de Datos
Instalamos el servidor mysql apt install mysql-server
, una ves instalado entramos en la base de datos con el usuario root
, creamos la base de datos proftpd
y le damos permisos:
root@ftp:/home/vagrant# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 37 Server version: 5.5.53-0+deb8u1 (Debian) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> CREATE DATABASE proftpd; Query OK, 1 row affected (0.00 sec) mysql> GRANT ALL ON proftpd.* TO proftpd@localhost IDENTIFIED BY "usuario"; Query OK, 0 rows affected (0.00 sec)
Una vez creada la base de datos, vamos a acceder use proftpd;
y vamos a crear las tablas y vamos a insetar los datos:
mysql> CREATE TABLE usuarios ( -> username char(20) NOT NULL, -> password char(70) NOT NULL, -> uid int(6) default NULL, -> gid int(6) default NULL, -> homedir char(50) default NULL, -> shell char(30) default NULL, -> activa tinyint(4) default '1', -> dominio char(50) default NULL -> ); Query OK, 0 rows affected (0.01 sec) mysql> CREATE TABLE grupos ( -> groupname char(20) NOT NULL, -> gid int(6) NOT NULL default '65534', -> members longtext -> ); Query OK, 0 rows affected (0.01 sec)
Y insertamos los datos:
mysql> insert into usuarios values('juanlu',password('usuario'),2001,2001,'/var/www/html/juanlu','/bin/bash',1,'jlramirez.com'); Query OK, 1 row affected (0.01 sec) mysql> insert into grupos values('alumnos',2001,'alumnos'); Query OK, 1 row affected (0.00 sec)
Creamos la carpeta para el usuario virtual
Creamos la carpeta para el usuario virtual mkdir -p /home/ftp/user_ftp
y los permisos chown -R 2001:2001 /home/ftp/user_ftp
Reiniciamos el servicio systemctl restart proftpd
Comprobacion usuarios virtuales
Accedemos desde un cliente ftp (en este caso se encuentra en la maquina que hace de servidor), por tanto, entramos con ftp localhost
, especificamos el usuario y la contraseña. Y hacemos un ls
, para comprobar el contenido:
[…] a instalar el servidor FTP, el cual podemos ver una explicacion mas detallada en el siguiente post Servidor FTP, en este caso vamos a realizar una instalacion sencilla, por lo tanto instalamos los siguientes […]
[…] ello en la otra maquina vamos a instalar un Servidor FTP y agregamos la siguiente regla en el cortafuegos para permitir el acceso desde el […]